#include "triangle.h"

Triangle::Triangle(){}

Triangle::Triangle(Point _p1, Point _p2, Point _p3)
{
	this->init(_p1, _p2, _p3);
}


// pour re-initialisation
void Triangle::init(Point _p1, Point _p2, Point _p3)
{
	p1 = _p1;
	p2 = _p2;
	p3 = _p3;
	this->genere_ligne();
}

// fonction pour la mise au Triangle
void Triangle::afficher(Canevas &cv)
{
	for(int i = 0 ; i < (int)triangle_ligne.size() ; i++)
	{
		triangle_ligne.at(i).afficher(cv);
	}
}

//Fonction pour faire tourner un Triangle autour d'un centre
void Triangle::rotation(Point centre, double angleRadian)
{
	Point point_tmp;
	p1.rotation(centre, angleRadian);
	p2.rotation(centre, angleRadian);
	p3.rotation(centre, angleRadian);
	for(int i = 0 ; i < (int)triangle_ligne.size() ; i++)
	{
		point_tmp.init(triangle_ligne.at(i).valPoint1());
		point_tmp.rotation(centre, angleRadian);
		triangle_ligne.at(i).changePoint1(point_tmp);

		point_tmp.init(triangle_ligne.at(i).valPoint2());
		point_tmp.rotation(centre, angleRadian);
		triangle_ligne.at(i).changePoint2(point_tmp);
	}
}

// fonction pour deplacer un Triangle en absolu.  Les parametres sont des
// deplacement par rapport a la position courante.
void Triangle::deplacement(int deltaX, int deltaY)
{
	Point point_tmp;
	p1.deplacement(deltaX, deltaY);
	p2.deplacement(deltaX, deltaY);
	p3.deplacement(deltaX, deltaY);
	for(int i = 0 ; i < (int)triangle_ligne.size() ; i++)
	{
		point_tmp.init(triangle_ligne.at(i).valPoint1());
		point_tmp.deplacement(deltaX, deltaY);
		triangle_ligne.at(i).changePoint1(point_tmp);

		point_tmp.init(triangle_ligne.at(i).valPoint2());
		point_tmp.deplacement(deltaX, deltaY);
		triangle_ligne.at(i).changePoint2(point_tmp);
	}
}

// fonction pour deplacer un Triangle proportionnellement a un centre.
// Les parametres sont le Triangle de reference un la proportion du deplacement
void Triangle::modif_taille(Point ancre, float proportion)
{
	Point point_tmp;
	p1.modif_taille(ancre, proportion);
	p2.modif_taille(ancre, proportion);
	p3.modif_taille(ancre, proportion);
	for(int i = 0 ; i < (int)triangle_ligne.size() ; i++)
	{
		point_tmp.init(triangle_ligne.at(i).valPoint1());
		point_tmp.modif_taille(ancre, proportion);
		triangle_ligne.at(i).changePoint1(point_tmp);

		point_tmp.init(triangle_ligne.at(i).valPoint2());
		point_tmp.modif_taille(ancre, proportion);
		triangle_ligne.at(i).changePoint2(point_tmp);
	}
}

Point Triangle::val_P1()
{
	return p1;
}
Point Triangle::val_P2()
{
	return p2;
}
Point Triangle::val_P3()
{
	return p3;
}

void Triangle::genere_ligne()
{
	Ligne ligne_tmp;

	ligne_tmp.init(p1, p2);
	triangle_ligne.push_back(ligne_tmp);

	ligne_tmp.init(p2, p3);
	triangle_ligne.push_back(ligne_tmp);

	ligne_tmp.init(p3, p1);
	triangle_ligne.push_back(ligne_tmp);
}
